package com.example.demo.thread.线程组的常用方法及数据结构;

public class ThreadGroup源码中的成员变量 {

    // 成员变量

    /*public class ThreadGroup implements Thread.UncaughtExceptionHandler {
        private final ThreadGroup parent; // 父亲ThreadGroup
        String name; // ThreadGroupr 的名称
        int maxPriority; // 线程最大优先级
        boolean destroyed; // 是否被销毁
        boolean daemon; // 是否守护线程
        boolean vmAllowSuspension; // 是否可以中断

        int nUnstartedThreads = 0; // 还未启动的线程
        int nthreads; // ThreadGroup中线程数目
        Thread threads[]; // ThreadGroup中的线程

        int ngroups; // 线程组数目
        ThreadGroup groups[]; // 线程组数组
    }*/




    // 构造函数

    /*
    // 私有构造函数
    private ThreadGroup() {
        this.name = "system";
        this.maxPriority = Thread.MAX_PRIORITY;
        this.parent = null;
    }

    // 默认是以当前ThreadGroup传入作为parent  ThreadGroup，新线程组的父线程组是目前正在运行线程的线程组。
    public ThreadGroup(String name) {
        this(Thread.currentThread().getThreadGroup(), name);
    }

    // 构造函数
    public ThreadGroup(ThreadGroup parent, String name) {
        this(checkParentAccess(parent), parent, name);
    }

    // 私有构造函数，主要的构造函数
    private ThreadGroup(Void unused, ThreadGroup parent, String name) {
        this.name = name;
        this.maxPriority = parent.maxPriority;
        this.daemon = parent.daemon;
        this.vmAllowSuspension = parent.vmAllowSuspension;
        this.parent = parent;
        parent.add(this);
    }*/





    // 第三个构造函数里调用了checkParentAccess方法，这里看看这个方法的源码：

    /*// 检查parent ThreadGroup
    private static Void checkParentAccess(ThreadGroup parent) {
        parent.checkAccess();
        return null;
    }

    // 判断当前运行的线程是否具有修改线程组的权限
    public final void checkAccess() {
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkAccess(this);
        }
    }*/
}
